package com.yc.bran.snack.controller;

import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.yc.bran.snack.dto.MemberInfoDto;
import com.yc.bran.snack.util.Sample;

import cn.hutool.core.util.RandomUtil;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.teautil.models.RuntimeOptions;

@RestController
@RequestMapping("/msg")
public class SmsController {
	
	@Autowired  
	private StringRedisTemplate stringRedisTemplate; 

	@GetMapping("/send")  
	public String send(@RequestParam String phone) {
		
		MemberInfoDto memberInfoDto = new MemberInfoDto();
		
		try {  
			// 创建短信服务客户端  
			Client client = Sample.createClient();
			
			// 生成随机验证码  
            String code = RandomUtil.randomNumbers(6);
            memberInfoDto.setCode(code);
            
            System.out.println(code);

			// 构建发送短信请求  
			SendSmsRequest sendSmsRequest = new SendSmsRequest()  
					.setSignName("阿里云短信测试") // 设置签名名称，需要在阿里云短信服务控制台中提前申请  
					.setTemplateCode("SMS_154950909") // 设置短信模板CODE，同样需要在控制台中申请  
					.setPhoneNumbers(phone) // 设置接收短信的手机号码  
					.setTemplateParam("{\"code\":\"" + code + "\"}"); // 设置模板参数，这里假设生成一个随机验证码

			// 使用用户ID和UUID生成一个唯一的key  
			String key = "phone:" + phone;  

			// 将验证码存储到Redis，并设置过期时间（例如：5分钟）  
			stringRedisTemplate.opsForValue().set(key, code, 5, TimeUnit.MINUTES);   

			// 发送短信，这里不处理返回值，实际项目中应该根据返回值做相应的处理  
			client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions());  

			return "短信发送成功";  
		} catch (Exception e) {  
			e.printStackTrace();  
			return "短信发送失败：" + e.getMessage();  
		}  
	}
}
